package lib

func init() {
	Probs = append(Probs, Problem{
		Num:         187,
		Discription: "约瑟夫环（在循环数组中，每次移除第k位的元素，然后从下一位接着移除第k位的元素，最后剩下哪个元素）",
		Level:       2,
		Labels: map[string]int{
			"递归":  1,
			"循环数组":  1,
		},
	})
}

func IceBreakingGame(num int, target int) int {
	var f func(int) int
	//f: 给定长度length的数组，每次移除第target个（从1开始）的元素，最后剩下的元素值（或者说是第几个元素)
	f = func(length int) int {
		if length == 1 {
			return 0
		}

		//这一轮删除的是第target%length个元素
		//如果我们知道了以下一轮为起点出发的最终结果是第f(length-1)元素，那从本轮开始最终留下的结果是则是从当前被删除的元素后开始数的第f(length-1)个元素
		return (target%length + f(length-1)) % length
	}

	return f(num)
}